// 关键游戏
// 先能玩，再抽象到game_util里

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class Game1 extends StatefulWidget {
  const Game1({Key? key}) : super(key: key);

  @override
  _Game1State createState() => _Game1State();
}

class _Game1State extends State<Game1> {
  late Future initData;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(color: Colors.cyan[200], child: _gamescene()));
  }

  @override
  void initState() {
    super.initState();
    initData = getInitialData();
  }

  // —— 与服务端联系 ——
  // * 获取游戏初始数据或者掉线之后的大更新
  Future getInitialData() {}
  // * 部分校正
  // 时间校正（尤其是超时那一部分，可能每3s需要服务端发一个包校正一下）
  Future timeComfirm() {}
  // 调用技能动画是接收服务端指令后再调用
  // 己方使用技能后，需要校正所使用技能面板和HP并调用技能画面
  Future asActive() {}
  // 敌方回合，监听服务端，敌方使用技能后，需要校正HP并调用技能画面
  Future asPassive() {}

  // 游戏玩法可变，所以要提出一个函数，用以解耦
  Widget _gamescene() {}

  // —— 玩法组件 ——
  // 背景
  void _background() {}
  // Hp
  void _hp() {}
  // 角色(可能有多个)
  void _roles() {}

  // 技能面板
  void _skillPanel() {}
  // 道具面板
  void _item() {}
}

// 每一场战斗，接收到来自服务端的 角色信息 udp 包括hp、技能、道具等
// 敌方回合则等待其服务器数据，根据数据采取播放相应的动画
// 选择技能、道具则发送请求
// 维持udp心跳包，超时则检查网络链接是否断开
// 断开则还有一个状态同步的机制
// 但我们不是要实现RPGMaker，否则就太艹了

// 前端其实只负责显示和选择


